Au cours de la période allant du 14 février 2014 au 9 mars 2014, dans le cadre de sa thèse sous la direction de Eric Gressier-Soudan, Viviane Gal a réalisé 67 expériences expériences au près de 24 individus. L’objectif de la thèse en question est de permettre l’établissement d’une cartographie des émotions à partir de biosignaux et d’observations. Il est donc nécessaire de réaliser des mesures qui permettent de poser une classification associant les signaux et des états émotionnels. Ces mesures ont été réalisées au cours d’expériences mettant les participants aux prises avec différents média dont on peut supposer qu’elles suscitent chez eux un certain nombre d’émotions. Avec les mesures en question, l’objectif est de décrire ces émotions à l’aide d’outils statistiques, graphiques et autres algorithmes d’apprentissage.
Durant chaque expérience, différentes tâches sont proposées aux participants : - Regarder un film : une succession d’images et d’extraits de films - Un test de concentration / méditation en utilisant les ondes cérébrales - Une expérience à base de sensations fortes, de stress et d’“ambiance de peur” - jouer à un jeu de stratégie pendant une durée de 20 minutes
Chaque expérimentation permet la capture de données de différents types (physiologiques, images, réponses). Les données physiologiques, mesurées à intervalle de temps régulier (31 millisecondes) consistent en un certain nombre de mesures réalisées par le biais de capteurs sur un individu pendant l’expérience. Les données physiologiques mesurées sont : 1. la température cutanée (T°) en degré celcius 2. la fréquence cardiaque (FC) en battement par minute 3. l’activité electrodermale (GSR) en microsiemens 4. la respiration (FR) en pourcentage de déformation du thorax.
Différents éléments ont été utilisés pour l’expérience : -3 capteurs sans fil, -1 convertisseur analogique numérique, -1 logiciel de capture.
Tout ces appareils/logiciels sont fournis par la société TEA. Les capteurs font partie de la gamme T-Sens. Nous allons maintenant les décrire plus en détail.
Selon les spécifications fournies par le constructeur, il s’agit d’un “module à transmission sans fil pour la mesure de la fréquence cardiaque grâce à une ceinture thoracique”1. Voir image
Le tableau suivant est aussi fourni dans le document :
Caractéristiques du capteur :
| Caractéristique | Valeur |
|---|---|
| Etalonnage | Pas d’étalonnage |
| Unité | BPM |
| Plage mes. | 10 – 220 BPM |
| Fréquence | 16Hz |
| Résolution | 1 BPM |
| Compatibilité | Polar Non codé ou équivalent |
Toujours selon le constructeur, il s’agit d’un “module à transmission sans fil combinant à la fois la mesure de la conductivité électrodermale et de la température cutanée” - voir image . Il mesure l’activité electrodermale et la température à la surface de la peau grâce à “deux électrodes [qui] se fixent à l’extrémité de deux doigts”2. En réalité, afin de ne pas gêner le participant dans ses mouvements, les expérimentateurs ont décidé - avec l’accord du fabriquant - de faire la mesure aux doigts de pied. L’objectif concernant la mesure de la conductivité électrodermale est de mesurer l’intensité du courant électrique à la surface de la peau, ce qui est généralement vu comme une bonne approximation de la transpiration.
Caractéristiques du capteur :
| Caractéristique | GSR | T° |
|---|---|---|
| Nombre de voies | 1 | 1 |
| Etalonnage | Pas d’étalonnage | Pas d’étalonnage |
| Unité | µS (Siemens) | °C |
| Fréquence | 32Hz | |
| Résolution | 16 Bits | 0.05°C |
| Plage de mesure | 0 -30µS | -40°C à 120°C |
| Linéarité | N/A | 0.5°C |
| Précision | N/A | 0.5°C |
| Caractéristiques électriques : | ||
| Alimentation Accumulateur | 190mAh | |
| Caractéristiques mécaniques : | ||
| Dimensions | 52mm x 25mm x 14mm | |
| Longueur câbles + électrodes | 200mm | |
| Poids | 20g | |
| Conditions d’utilisation | ||
| T° | 0°C à 40°C | |
| Humidité | < 60% |
le capteur est un “module à transmission sans fil pour la mesure des mouvements thoraciques ou abdominaux. Le module (ceinture inclue) fournit des informations permettant d’analyser le rythme respiratoire et l’amplitude des respirations”3. Voir image
Caractéristiques du capteur :
| Caractéristique | Valeur |
|---|---|
| Nombre de voies | 1 |
| Etalonnage | Pas d’étalonnage |
| Unité | % (déformation) |
| Fréquence | 32Hz |
| Résolution | 0.01% |
| Caractéristiques électriques : | |
| Alimentation Accumulateur | 190mAh |
| Autonomie | 8h |
| Temps de chargement | 3h |
| Caractéristiques mécaniques : | |
| Dimensions | 52mm x 25mm x 14mm |
| Poids | 20g |
| Longueur ceinture | 1m |
| Plage de mesure | 0-75% |
| Allongement maximal | 70mm (75%) |
| Conditions d’utilisation : | |
| T° | 0°C à 40°C |
| Humidité | < 60% |
C’est la température à la surface du corps, prise par le biais d’un capteur aux orteils (pieds nus). Le fabriquant a expliqué lors d’une conversation avec Viviane Gal que cette température est bien influencée par la température du corps mais aussi par la température environnante. Il sera nécessaire de procéder à des mesures complémentaires pour mesurer l’impact théorique de la température ambiante sur la température fournie par le capteur et d’évaluer leur influence sur les mesures obtenues.
La réspiration est mesurée par une ceinture abdominale sur laquelle est disposé un capteur mesurant la nombre de battement par minute. Là encore, lors de l’expérience, certains effets parasites ont pu perturber la bonne mesure de la respiration. En effet, la ceinture se place autour de l’abdomen et se serre à l’aide de crans. Or, il n’y a pas eu ni vérification sur le cran choisi, ni mesure de la circonférence de l’abdomen. Cela remet en question la possiblité de faire des comparaisons entre individus. En effet, si la ceinture était très serrée pour une personne par rapport à une autre, le même mouvement de l’abdomen pourrait ne pas donner la même mesure. Il est donc important de faire des mesures complémentaires pour vérifier l’influence de ce phénomène.
La fréquence cardiaque est mesurée par une ceinture abdominale qui “sonde” la fréquence cardiaque par le biais d’un capteur.
L’activité electrodermale mesure l’insensité du courant à la surface de la peau. Elle donne une approximation de la transpiration d’une personne. La prise de mesure au pied doit là aussi amener à réfléchir à la pertinence des mesures. La transpiration au pied est-elle pertinente dans l’exercice en question ?
Nous avons reçu de Viviane Gal un fichier par expérience. Ce fichier est un tableau au format “csv” comportant 5 colonnes : - la date au format “J/M/AAAA H:Mn:S.m” (J : jour, M : mois, A : année, H : heure, Mn : minutes, S : secondes, m : millisecondes) - la respiration : décimal positif ou négatif, 3 chiffres après la virgule - l’activité électrodermale : décimal positif ou négatif, 3 chiffres après la virgule - la température : décimal positif, 3 chiffres après la virgule - la fréquence cardiaque : entier positif
La figure 1 représente les premières lignes des données pour l’expérience AB.
Les fichiers qui nous ont été donnés pour le moment sont au nombre de 10. Le nom de chaque fichier est une concaténation des initiales de la personne ayant fait le test avec un numéro si la personne a fait plusieurs expériences et avec le terme “SurEchantillonHF”. Par exemple, pour l’individu A.B., le fichier sera “AB_SurEchantillonHF.csv”.
Pour pouvoir importer les données de manière simple et “automatisée”, il faut uniformiser le contenu des fichiers. Par exemple, il manque les noms des variables dans certains fichiers, nous avons donc créé “à la main” des nouveaux fichiers avec le nom des variables inséré dans la première ligne. Nous avons ajouté des dates factices lorsqu’elle manquaient en “copiant-collant” les dates à partir du fichier “AB”(l’important étant que les intervalles de temps soit de 9 ms).
Le nom de ces fichiers est le nom du fichier original avec le suffixe “_header" avant le format.
Nous avons décidé de traiter les données sous le logiciel ‘R’ très pratique pour gérer des données au format csv, qui a surtout comme avantage : - d’être, ainsi que ces bibliothèques, sous licence libre (généralement GPL-2 ou 34, - d’avoir de bonnes bibliothèques pour les algorithmes d’apprentissage, de réseaux de neurones, etc., - d’avoir de bonnes bibliothèques de modélisations graphiques (notamment ggplot2, très flexible)
Loading required package: knitr
Loading required package: plyr
Loading required package: ggplot2
Loading required package: reshape2
Loading required package: scatterplot3d
Loading required package: kohonen
Loading required package: class
Loading required package: MASS
Les données qui sont traitées sous le logiciel “R” ont été mises sous la forme d’un data frame. Les data frames sont de simples tables de valeurs où chaque colonne correspond à un suite de valeur d’une variable d’un type donné (entier, booléén, chaîne de caractère,…) et chaque ligne a un n-upplet (une instance) de chacune des variables. Chaque colonne a de plus un nom et chaque ligne peut aussi en avoir un.
Dans cette partie, nous avons créé autant de “data frame” qu’il y a d’expériences réalisées (donc 10). Dans chaque data frame, une ligne correspond à un instant d’une expérience et chaque colonne indique les différentes mesures.
Nous utilisons une fonction load.file pour charger les données en mémoire dans des data frames (dont le nom sera data. concaté aux initiales de l’individu, par exemple data.AB pour l’expérience avec l’utilisateur A.B.)
chargement des données au format numérique (sauf 1ère colonne au format “date”, POSIX). Les noms des variables sont : -date, -respiration, -activite.electrodermale, -temperature, -frequence.cardiaque
Dimension des data frames :
| Data frame | dimension |
|---|---|
| “AB” | 48803 x 7 |
| “DA” | 27622 x 7 |
| “CW” | 48804 x 7 |
| “FS1” | 49518 x 7 |
| “HL” | 48762 x 7 |
| “LM” | 48719 x 7 |
| “PCo” | 48608 x 7 |
| “PCo2” | 27047 x 7 |
| “PCo3” | 11787 x 7 |
| “ST” | 48775 x 7 |
Représentation des 5 premières données pour l’expérience AB pour exemple :
[1] " date respiration activite.electrodermale temperature frequence.cardiaque"
[2] "-------------------- ------------ ------------------------ ------------ --------------------"
[3] "2014-03-06 15:19:29 -10.644 -44.157 29.417 74"
[4] "2014-03-06 15:19:29 -10.379 -44.157 29.417 74"
[5] "2014-03-06 15:19:29 -10.168 -44.157 29.417 74"
[6] "2014-03-06 15:19:29 -9.981 -44.157 29.417 74"
[7] "2014-03-06 15:19:29 -9.833 -44.169 29.417 74"
[8] "2014-03-06 15:19:29 -9.692 -44.169 29.417 74"
Y a-t-il des données manquantes ?
| Data frame | dimension |
|---|---|
| “AB” | aucune |
| “DA” | aucune |
| “CW” | aucune |
| “FS1” | aucune |
| “HL” | aucune |
| “LM” | aucune |
| “PCo” | existe(s) |
| “PCo2” | aucune |
| “PCo3” | aucune |
| “ST” | aucune |
Il existe effectivement des données manquantes pour PCo :
date respiration activite.electrodermale temperature
NA <NA> NA NA NA
NA.1 <NA> NA NA NA
frequence.cardiaque quart.temps exp
NA NA <NA> <NA>
NA.1 NA <NA> <NA>
A quelles lignes et quelle(s) colonne(s) ?
row col
[1,] 22340 2
[2,] 22345 2
Vu qu’il ne s’agit que de deux données sur plus de 27000, nous proposons de copier la valeur précédente à la place de la donnée manquante.
#remplace la valeur manquante par la valeur précédente de la même colonne
data.PCo[l.na[1],ncol.1] <- data.PCo[l.na[1]-1,ncol.1]
data.PCo[l.na[2],ncol.2] <- data.PCo[l.na[2]-1,ncol.2]
Nous allons utiliser la bibliothèque ggplot25 développée par Hadley Wickham et Winston Chang et qui implémente la théorie de la “grammaire des graphiques” de Leland Wilkinson6 sous ‘R’
L’objectif principal est de se donner une idée de la distribution et de la dispersion des données. En particulier, nous voulons comparer les valeurs mesurées à celle annoncées par le constructeur.
Nous allons représenter les données par expérience en utilisant deux outils :
“Jitter” (qui, sur la base d’un simple histogramme, déplace aléatoirement - de manière uniforme - les données sur un segment horizontale de longueur prédeterminée) L’avantage de ce graphique est de permettre d’avoir une idée de la “superposition” des données. Par ailleurs, afin d’ajouter encore une meilleure vision de cette superposition, nous avons ajouter une transparence aux disques représentants chaque donnée. Ainsi, plus des données dans l’histogramme se superposent, plus la couleur des pixels du disque qui les “map” est foncée.
“Boxplot” ou “boîte à moustache”, c’est une manière beaucoup plus fréquente de représenter les données par le biais d’une représentation graphique de sa médiane et ses quartiles et des “outliers” ou données aberrantes.
Nous allons représenter dans deux graphiques de type “jitter” et “boxplot” les données mesurées pour la variable respiration (en ordonnée) pour l’ensemble des expériences (en abscisse).
Comme nous l’avons vu, le constructeur annonce des valeurs entre 0% et75%, or nous voyions que les données vont en tout de -20 à 20. Ces données ne semblent donc pas compatibles. Lors d’une discussion à ce propos avec des représentants du fabriquant des capteurs, Ceux-ci nous ont expliqué que les données négatives devaient être inversées. Mais il reste un autre problème : certaines expériences ont des valeurs à la fois positives et négatives (ce que montre la figure 5). Des analyses et tests supplémentaires sont donc nécessaires avant de pouvoir exploiter ces données. On peut aussi noter que l’expérience ‘LM’, les données sont pratiquement constantes pendant toute l’expérience. Ce que confirme le fait que sur rlength(data.LM$respiration), 46765 sont constantes. Comme les données sont au millième de %, cela ne peut s’expliquer que par un problème lors de la prise de mesure.
Comme nous l’avons déjà dit, la plage de valeur annoncée par le constructeur est 0-30 µS. Or nous voyions ici des valeurs allant de -30 à -50. Selon un représentant du fabriquant, cela pourrait être du à un décallage fortuit du à l’algorithme du logiciel utilisé pour capter les mesures. Selon lui, il faudrait décaller les données de +69. Cela semble assez cohérent avec nos observations. Par ailleurs, pour un certain nombre d’expériences, nous avons à nouveau une variation insuffisante qui laisse penser que certaines mesures n’ont pas fonctionné. En particulier ‘HL’ (une valeur unique : -48.936) et ‘ST’ (nombre de valeurs : 1) mais ‘DA’ est aussi douteux.
Concernant la température, on voit que la dispersion des données est généralement faible. Les spécifications du capteurs annoncent un spectre de mesure de -40°C à 120°C, avec une précision de 0.05°C. Les données sont toutes bien à l’intérieur de cette plage. On remarque en particulier sur le “box plot” que les données sont (à quelques “outliers” près) très rapprochées. Cela correspond ici à ce qui est attendu puisque la mesure au corps ne varie pas beaucoup. Ainsi, une étude récente a donné lieu à une mesure de la température d’une personne selon trois méthodes (buccale, anale et cutannée) et la variation moyenne de la température du corps humain est d’environ 1 degré7. Toujours dans cette étude, pour la température cutanée, la variation maximum est de 2 degrés environ. Seule l’expérience ‘AB’ propose une amplitude importante : 4r qui demandera une enquête plus appronfondie.
Enfin, concernant la mesure cardiaque, la plage de mesure annoncée est de 10 à 220 BPM avec une résolution de 1 BPM. Les données sont compatibles avec ces spécifications. Nous remarquons une plus grande variation de la fréquence cardiaque, ce qui là encore est en accord avec les résultats trouvés par ailleurs. D’une personne à l’autre, d’un moment à l’autre, les variations des battements par minute peuvent être importantes (un sportif peut ainsi réduire son rythme cardiaque par 2).
Nous présentons rapidement un certain nombre de représentations graphiques complémentaires par expérience et par valeur. Nous avons là encore utilisé les graphiques de type “Jitter” avec de la transparence mais cette fois-ci en découpant les données par quart temps grâce à une donnée catégorielle afin d’avoir une idée de l’évolution dans le temps.
L’analyse de ces graphiques n’est pas encore terminée. Nous l’ajouterons au rapport final.
Pour finir, nous ajoutons les graphiques des “matrices de nuages de points” ou “scatter plots” permettent de représenter pour chaque expérience des couples de variables dans un plan. A l’intérieur d’une matrice, on trouve donc plusieurs nuages de points avec en abscisse une des quatres mesures (respiration, activité électrodermale, température, fréquence cardiaque) et en ordonnée une autres de ces quatres mesures, différente de celle choisie pour l’abscisse. Ainsi, pour l’expérience ‘AB’ (figure 13), le nuage de point situé en dessous du carré intitulé “respiration” dans la matrice scatter plot représente dans le plan l’ensemble des couples “respiration” et “activité electrodermale” pour chaque instant écoulé durant l’expérience.
Par ailleurs, en utilisant un dégradé de couleurs du jaune vers le rouge, nous avons représenté l’évolution dans le temps de ces couples : plus on approche de la fin de l’expérience, plus la couleur du point devient rouge.
Il semble qu’avant de pouvoir traiter les données, un certain nombre de tests doivent être réalisées. Par ailleurs, des questions doivent être posées au fabriquant des capteurs concernant la possiblite de devoir ajouter un “offset” aux mesures brutes. Il existe trop d’incertitude concernant la qualité des données mesurées pour pouvoir procéder à des analyses plus poussées (voir le document en annexe pour une tentativeppréliminaire). Nous sommes donc en contact avec des représentants de la société fabriquant les capteurs. Par ailleurs, nous avons prévu avec Viviane Gal début Septembre 2015 de procéder à un certain nombre de tests avec le matériel pour mieux comprendre les données reçues, les possibles anomalies et trancher concernant un certain nombre de questions (influence de la température ambiante, vérifer s’il y a peu avoir des problèmes de déconnexion…) qui se sont posées à nous dans l’exploration des données.
Voir http://teaergo.com/site/sites/default/files/docs/TSens_CFM-cardio_FR_V1.8.pdf↩
Voir http://teaergo.com/drupal/sites/default/files/docs/TSens_FSR_FR_V1.8.pdf↩
Voir http://teaergo.com/drupal/sites/default/files/docs/TSens_Respi_FR_V1.8.pdf↩
Voir http://www.r-project.org/Licenses pour plus de détails.↩
Voir notamment http://cran.r-project.org/web/packages/ggplot2/ggplot2.pdf↩
Voir graphique page 282, http://www.altmedrev.com/publications/11/4/278.pdf↩